# Definition for singly-linked list.
"""
    给你一个链表的头节点 head 和一个整数 val ，
    请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。


    示例 1：

        输入：head = [1,2,6,3,4,5,6], val = 6
        输出：[1,2,3,4,5]

    示例 2：

        输入：head = [], val = 1
        输出：[]
"""

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
from typing import Optional


class Solution:
    """
    注：这里可以优化，那就是手动给它加一个头节点，然后返回头节点的下一个节点即可。
    """
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        while head and head.val == val:
            head = head.next
        ans = head
        while head and head.next:
            if head.next.val == val:
                head.next = head.next.next
                continue
            head = head.next
        return ans